package cn.tedu.justone.pack02;

/**
 * @作者：JustOne
 * @时间：2021/8/27 - 23:33
 */
public class Demo06_案例演示龟兔塞跑 {

    //示例三：龟兔赛跑
    //要求：
    // 1,比赛距离100米。
    // 2,兔子每秒跑5米，跑20米休息10秒。
    // 3,乌龟每秒跑1米，不休息。
    // 4,其中一个跑到终点后比赛结束，另一个也不用跑了。

    static boolean duang = false;//---是否有人到达到了终点

    public static void main(String[] args) {
        //乌龟
        Thread t1 = new Thread(){
            int len = 100; //------离终点的距离
            @Override
            public void run() {
                while ( !duang ){
                    if(len>0){
                        len -= 1;
                        System.out.println("乌龟跑了1米，离终点还有："+len);
                    }else{
                        System.out.println("乌龟到了");
                        duang = true;
                        break;
                    }
                    mySleep(1000);//
                }
                System.out.println("乌龟已停止比赛");
            }
        };

        //兔子
        Thread t2 = new Thread(){
            int len = 100; //------离终点的距离
            @Override
            public void run() {
                while ( !duang ){
                    if(len>0){
                        len -= 5;
                        System.out.println("---兔子跑了5米，离终点还有："+len);
                        //这个if要放到这个里面，否则当len==0并不会马上执行duang = true;
                        if(len<=0){
                            System.out.println("---兔子到了");
                            duang = true;
                            break;
                        }
                    }

                    mySleep(1000);
                    if(len%20==0){
                        System.out.println("========兔子在休息，离终点还有："+len);
                        mySleep(10000);//休息10秒
                    }
                }
                System.out.println("---兔子已停止比赛");
            }
        };


        t1.start();
        t2.start();
    }

    //为了让代码更优雅，编写统一的休眠方法
    public static void mySleep(long m){
        try {
            Thread.sleep(m);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

